package com.ruoyi.project.cms.type.service.impl;

import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.exception.cms.CmsNotDeleteException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.security.ShiroUtils;
import com.ruoyi.project.cms.content.domain.CmsContent;
import com.ruoyi.project.cms.content.mapper.ContentMapper;
import com.ruoyi.project.cms.type.domain.CmsType;
import com.ruoyi.project.cms.type.mapper.CmsTypeMapper;
import com.ruoyi.project.cms.type.service.ICmsTypeService;
import com.ruoyi.project.system.post.domain.Post;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @program: zhizun
 * @author: Mrs.ye
 * @create: 2020-09-15 19:22
 * @description:
 **/
@Service
public class CmstypeSeviceImpl implements ICmsTypeService {

    @Autowired
    private CmsTypeMapper cmsTypeMapper;
    @Autowired
    private ContentMapper contentMapper;

    /**
     * 分页查询所有的公告类型
     * @param cmsType 传进来的参数
     * @return 返回公告类型的集合.即分页查询的结果
     */
    @Override
    public List<CmsType> selectCmsTypeList(CmsType cmsType) {
        return  cmsTypeMapper.selectCmsTypeList(cmsType);
    }

    /**
     * 添加公告类型
     * @param cmsType 新添加的公告
     * @return 插入的行数
     */

    @Override
    public int insertCmsType(CmsType cmsType) {
        cmsType.setCreateBy(ShiroUtils.getLoginName());
        return cmsTypeMapper.insertCmsType(cmsType);
    }

    /**
     * 校验岗位名称是否唯一
     *
     * @param cmsType 公告信息
     * @return 结果
     * 根据公告的名字到数据库中查询公告
     * 将数据库中公告的id传进来的公告id进行对比
     */
    @Override
    public String checkTypeNameUnique(CmsType cmsType)
    {
        Long typeId = StringUtils.isNull(cmsType.getTypeId()) ? -1L : cmsType.getTypeId();
        CmsType info = cmsTypeMapper.checkTypeNameUnique(cmsType.getTypeName());
        //如果根据公告名称查询出来了公告,并且查询出来的公告id和原本的id不同,表示同一个公告名称有不同的id,
        //反过来就是说不同的id相同的公告名称,这样公告名称就不唯一了
        if (StringUtils.isNotNull(info) && info.getTypeId().longValue() != typeId.longValue())
        {
            return UserConstants.TYPE_CODE_NOT_UNIQUE;
        }
        return UserConstants.TYPE_CODE_UNIQUE;
    }

    /**
     * 通过公告id查询公告,用于修改时的数据回显操作
     * @param typeId 要修改的公告id
     * @return 查询的数据
     */

    @Override
    public CmsType selectTypeById(Long typeId) {

        return cmsTypeMapper.selectTypeById(typeId);
    }

    /**
     * 更新公告
     * @param cmsType
     * @return 更新的结果
     */

    @Override
    public int updateType(CmsType cmsType) {
        cmsType.setUpdateBy(ShiroUtils.getLoginName());
        return cmsTypeMapper.updateCmsType(cmsType);
    }

    @Override
    public int removeCmsTypeById(Long[] ids) {
        boolean flag=true;

        for (Long id : ids) {
          List<CmsContent> contents=  contentMapper.selectContentByTypeId(id);
            System.out.println("公告内容"+contents);
            if(contents !=null && contents.size()>0){
                flag=false;
                break;
            }

        }
        if(!flag){
            throw new CmsNotDeleteException("公告类型还有公告内容,不能删除");
        }
      return cmsTypeMapper.removeCmsTypeById(ids);
    }
}
